package com.yilei.testninegridview

import android.content.Context
import android.graphics.Color
import android.util.AttributeSet
import android.view.Gravity
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import com.bumptech.glide.Glide

class NineGridView2 @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : ViewGroup(context, attrs, defStyleAttr) {

    private var imageUrls = ArrayList<String>()
    private var infoTextView: TextView

    init {
        // 初始化 TextView
        infoTextView = TextView(context).apply {
            setBackgroundColor(Color.GRAY) // 设置背景为灰色
            setTextColor(Color.WHITE) // 设置文本颜色
            text = "+" // 设置文本内容
            gravity = Gravity.CENTER

            // 点击事件：添加一张图片
            setOnClickListener {
                addNewImage()
            }
        }
        addView(infoTextView) // 将 TextView 添加到 ViewGroup
    }

    fun setImages(urls: List<String>) {
        imageUrls.clear() // 清空旧的图片 URL
        imageUrls.addAll(urls) // 添加新的图片 URL
        removeAllViews() // 移除所有视图

        for ((index, url) in imageUrls.withIndex()) {
            val imageView = ImageView(context)
            imageView.scaleType = ImageView.ScaleType.CENTER_CROP // 设置 scaleType
            addView(imageView)

            // 使用 Glide 加载图片
            Glide.with(context)
                .load(url)
                .into(imageView)

            // 设置点击事件，移除当前点击的图片
            imageView.setOnClickListener {
                Toast.makeText(context, "$index", Toast.LENGTH_SHORT).show()
                removeImage(index)
            }

            // 为 ImageView 设置 tag，以便后续获取
            imageView.tag = index
        }

        // 添加 "+" TextView
        addView(infoTextView)
        requestLayout()
    }

    //    private fun removeImage(index: Int) {
//        if (index in imageUrls.indices) {
//            imageUrls.removeAt(index) // 移除图片 URL
//            removeAllViews() // 清空当前视图
//            setImages(imageUrls) // 重新设置视图以更新显示
//        }
//    }
    private fun removeImage(index: Int) {
        if (index in imageUrls.indices) {
            imageUrls.removeAt(index) // 移除图片 URL
            // 重新设置视图以更新显示，但保留 infoTextView
            val currentImages = ArrayList(imageUrls) // 保存当前图片列表

            removeAllViews() // 清空当前视图
            setImages(currentImages) // 更新视图
        }
    }

    private fun addNewImage() {
        // 这里可以定义如何添加新图片，比如使用一个固定的URL或者弹出选择图片的对话框
        val newImageUrl = "http://d.hiphotos.baidu.com/image/h%3D200/sign=ea218b2c5566d01661199928a729d498/a08b87d6277f9e2fd4f215e91830e924b999f308.jpg"
        // 示例新图片URL
        val currentImages = ArrayList(imageUrls) // 保存当前图片列表
        currentImages.add(newImageUrl)
        removeAllViews() // 清空当前视图
        setImages(currentImages) // 更新视图
    }

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        val width = MeasureSpec.getSize(widthMeasureSpec)
        val height = MeasureSpec.getSize(heightMeasureSpec)

        val cellSize = width / 3 // 每行3个单元
        // 计算总高度，包含最后的 TextView
        val totalHeight =
            if (imageUrls.size < 3) cellSize else cellSize * ((imageUrls.size + 1) / 3 + 1)

        setMeasuredDimension(width, totalHeight)

        // 测量所有子视图
        for (i in 0 until childCount) {
            val child = getChildAt(i)
            measureChild(child, widthMeasureSpec, heightMeasureSpec)
        }
    }

    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
        val gap = 16
        val cellSize = (measuredWidth - gap * 2) / 3 // 减去两边的间隙

        for (i in 0 until childCount) {
            val child = getChildAt(i)
            if (child.visibility != GONE) {
                val row = i / 3
                val col = i % 3

                // 计算每个子视图的左上角位置
                val childLeft = col * (cellSize + gap) // 加上左侧间隙
                val childTop = row * (cellSize + gap) // 加上上侧间隙

                // 确保布局不超出父视图边界
                child.layout(childLeft, childTop, childLeft + cellSize, childTop + cellSize)
            }
        }
    }
}
